package com.zsj.juc.sync;

/**
 * @author <a href="https://gitee.com/zhengshengjun">zsj</a>
 * @date 2023/12/5.
 * <p>
 * 第一步创建一个资源类 定义属性和操作方法
 */

class Ticket {
    private int number;

    //操作方法
    public void setNumber(int number) {
        this.number = number;
    }

    //加入同步锁
    public synchronized void sale() {
        //当票大于1时卖出
        if (number > 0) {
            System.out.println("当前线程id为:" + Thread.currentThread().getName() + "卖出一张票");
            number -= 1;
            System.out.println("当前剩余票数为:" + number);
        } else System.out.println("没票了");

    }
}

public class SaleTicket {

    //创建多个线程 进行同步方法的调用
    public static void main(String[] args) {
        Ticket ticket = new Ticket();
        ticket.setNumber(100);
        //同时开启两个线程进行消费
        new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                ticket.sale();
            }
        }, "aa").start();

        //同时开启两个线程进行消费
        new Thread(() -> {
            for (int i = 0; i < 100; i++) {
                ticket.sale();
            }
        }, "bb").start();

    }

}
